package j.util.jdbc.simple.core.operations;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 更新操作
 * @author 刘军海
 * @version Sep 18, 2011 12:53:01 PM
 *
 */
public interface SimpleJdbcUpdateOperations {

	/**
	 * 根据PK更新updatedData中的数据，但除pk的数据
	 * map中的key为数据库字段名称
	 * @param clazz
	 * @param updatedData
	 * @return
	 */
	<T> int update(Connection connection, Class<T> clazz, Map<String, Object> updatedData)throws SQLException;
	
	/**
	 * 批量更新，每项的更新根据PK进行更新，PK项在每个map中
	 * 不执行更新前检查操作、也不比较新旧值
	 * map中的key为数据库字段名称
	 * @param clazz
	 * @param list
	 * @return
	 */
	<T> int[] updateBatch(Connection connection, Class<T> clazz, List<Map<String, Object>> list)throws SQLException;
	
	/**
	 * 仅更新updatedDate的数据，条件由where指定
	 * 不执行更新前检查操作、也不比较新旧值
	 * updatedDate及where map中的key为实体属性名称
	 * @param clazz
	 * @param updatedData 被更新的数据，有多少则更新多少，不做任何过滤
	 * @param where 条件部分，可在条件中指定操作符，与下一个条件的关系
	 * @return
	 */
	<T> int update(Connection connection, Class<T> clazz, Map<String, Object> updatedData, Map<String, Object> where)throws SQLException;
	
	/**
	 * 根据pk更新，且执行更新前的检查，然后比较新旧值，且只更新新旧值不一样的数据
	 * pk项的值由newData中的项指定，且这些项不会出现在更新列表中
	 * 新旧map中的key均为实体属性名称
	 * @param clazz
	 * @param newData
	 * @param oldData
	 * @return 受影响的行数
	 */
	<T> int updateNewByOldData(Connection connection, Class<T> clazz, Map<String, Object> newData, Map<String, Object> oldData)throws SQLException;
}
